QNW_TS_Util = QNW_TS_Util or {}

local this = QNW_TS_Util

function QNW_TS_Util.tableGet(_table, _fun)
    local new = {}
    for k, v in pairs(_table) do
        if _fun(k, v) then
            new[k] = v
        end
    end
    return new
end

function QNW_TS_Util.tableCopy(_table, _deep)
    local new = {}
    for k, v in pairs(_table) do
        if type(v) == "table" and _deep then
            new[k] = this.tableCopy(v)
        else
            new[k] = v
        end
    end
    return new
end

function QNW_TS_Util.tableContain(_table, _value)
    for k, v in pairs(_table) do
        if v == _value then
            return true
        end
    end
    return false
end

function QNW_TS_Util.tableContainKey(_table, _key)
    for k, v in pairs(_table) do
        if k == _key then
            return true
        end
    end
    return false
end

function QNW_TS_Util.tableRemove(_table, _fun)
    local new = {}
    for k, v in pairs(_table) do
        if not _fun(k, v) then
            new[k] = v
        end
    end
    return new
end

function QNW_TS_Util.tableRemoveArray(_table, _fun)
    local new = {}
    for i, v in ipairs(_table) do
        if not _fun(i, v) then
            table.insert(new, v)
        end
    end
    return new
end

function QNW_TS_Util.print(_str)
    print(tostring(_str))
end

function QNW_TS_Util.isServer()
    return isServer() or (not isClient())
end

function QNW_TS_Util.isClient()
    return isClient() or (not isServer())
end